Anomalous behavior due to unexpected critical dependence on
the relative timing of events.
For example, if one process writes to a file while another is
reading from the same location then the data read may be the
old contents, the new contents or some mixture of the two
depending on the relative timing of the read and write
operations.
A common remedy in this kind of
race condition is {file
locking}; a more cumbersome remedy is to reorganize the system
such that a certain processes (running a
daemon or the like)
is the only process that has access to the file, and all other
processes that need to access the data in that file do so only
via interprocess communication with that one process.
As an example of a more subtle kind of
race condition,
consider a
distributed chat network like
IRC, where a
user is granted channel-operator
privileges in any channel
he starts. If two users on different
servers, on different
ends of the same network, try to start the same-named channel
at the same time, each user's respective server will grant
channel-operator privileges to each user, since neither will
yet have received the other's signal that that channel has
been started.
In this case of a
race condition, the "shared resource" is the
conception of the
state of the network (what channels exist,
as well as what users started them and therefore have what
privileges), which each server is free to change as long as it
signals the other servers on the network about the changes so
that they can update their conception of the state of the
network. However, the
latency across the network makes
possible the kind of
race condition described. In this case,
heading off
race conditions by imposing a form of control over
access to the shared resource -- say, appointing one server to
be in charge of who holds what privileges -- would mean
turning the distributed network into a centralized one (at
least for that one part of the network operation). Where this
is not acceptable, the more pragmatic solution is to have the
system recognize when a
race condition has occurred and to
repair the ill effects.
Race conditions also affect electronic circuits where the
value output by a
logic gate depends on the exact timing of
two or more input signals. For example, consider a two input
AND gate fed with a logic signal X on input A and its
negation, NOT X, on input B. In theory, the output (X AND NOT
X) should never be high. However, if changes in the value of
X take longer to propagate to input B than to input A then
when X changes from false to true, there will be a brief
period during which both inputs are true, and so the gate's
output will also be true. If this output is fed to an
edge-sensitive component such as a counter or flip-flop then
the temporary effect ("
glitch") will become permanent.
(2002-08-03)